/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package web;

import dtos.LinhaVendaDTO;
import dtos.ProdutoCatalogoDTO;
import dtos.ProdutoFisicoDTO;
import dtos.VendaDTO;
import ejb.FuncionarioBalcaoBean;
import ejb.ProdutoCatalogoBean;
import ejb.ProdutoFisicoBean;
import ejb.VendaBean;

import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import utils.FacesExceptionHandler;

/**
 *
 * @author Diogo
 */
@ManagedBean
@SessionScoped
public class FuncionarioBalcaoManager implements Serializable {

    @EJB
    FuncionarioBalcaoBean funcionarioBalcaoBean; 
    @EJB
    VendaBean vendaBean;
    @EJB
    ProdutoFisicoBean produtoFisicoBean;
    @EJB
    ProdutoCatalogoBean produtoCatalogoBean;
    
    
    
    private static final Logger logger = Logger.getLogger("web.AdministradorManager");
    private UIComponent componente;
    private final VendaDTO vendaNova;
    private VendaDTO vendaAtual;
    private final LinhaVendaDTO  linhaVendaNova;
    private LinhaVendaDTO linhaVendaAtual;
    
    private ProdutoCatalogoDTO produtoCatalogoAtual;
    private final ProdutoCatalogoDTO produtoCatalogoNovo;
    private ProdutoFisicoDTO produtoFisicoAtual;
    private final ProdutoFisicoDTO produtoFisicoNovo;
    
    
    public FuncionarioBalcaoManager() {

        vendaNova = new VendaDTO();
        linhaVendaNova = new LinhaVendaDTO();
        produtoCatalogoNovo = new ProdutoCatalogoDTO();
        produtoFisicoNovo = new ProdutoFisicoDTO();
    }

    /**
     ************************
     ******   Vendas  *******
     ************************
     * @return 
     */
    public List<VendaDTO> getVendas() {
        try {
            return vendaBean.getAllVendas();

        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver a lista de encomendas.", logger);
            return null;
        }
    }

    public VendaDTO getVenda(int id) {
        try {
            return vendaBean.getVenda(id);

        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver a lista de encomendas.", logger);
            return null;
        }
    }

    public String criarVenda() {
        try {
            vendaBean.criarVenda(vendaNova.getId(),
                    vendaNova.getDataVenda(), vendaNova.getCodFarmacia());
            vendaNova.reiniciar();
            return "funcBalc_venda_fechar?faces-redirect=true";

        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
        return "funcBalc_venda_fechar";
    }
    
    public String addLinhaVenda() {
        try {
            
            vendaBean.adicionarLinhaVenda(vendaNova.getId(), produtoCatalogoAtual.getId(), linhaVendaNova.getQuantidade());
            return "funcBalc_venda_criar?faces-redirect=true";
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
        return "funcBalc_venda_criar";
    }
    
    public void removerLinhaVenda() {
        try {
            vendaBean.removerLinhaVenda(vendaAtual.getId(), linhaVendaAtual.getId());
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
    }
     
    public void alterarLinhaVenda(){
        try {
            vendaBean.atualizarLinhaVenda(vendaAtual.getId(), linhaVendaAtual.getId(), linhaVendaAtual.getQuantidade());
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
    }
    
    public double getPrecoVenda(){
        try {
            return vendaBean.getPrecoVenda(vendaAtual.getId());
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
        return 0;
    }
    
    
    public String fecharVenda(){
        try {
            vendaBean.fecharVenda(vendaAtual.getId(), vendaAtual.getCodFarmacia());
            vendaAtual.reiniciar();
            return "funcBalc_venda_listar?faces-redirect=true";

        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema.", logger);
        }
        return "funcBalc_venda_listar";
    }
    
    public String outComeAdicionarLinha(){
        return "funcBalc_produto_catalogo_adicionar";
    }
    
    public UIComponent getComponente() {
        return componente;
    }

    public void setComponente(UIComponent componente) {
        this.componente = componente;
    }

    public FuncionarioBalcaoBean getFuncionarioBalcaoBean() {
        return funcionarioBalcaoBean;
    }

    public void setFuncionarioBalcaoBean(FuncionarioBalcaoBean funcionarioBalcaoBean) {
        this.funcionarioBalcaoBean = funcionarioBalcaoBean;
    }

    public VendaBean getVendaBean() {
        return vendaBean;
    }

    public void setVendaBean(VendaBean vendaBean) {
        this.vendaBean = vendaBean;
    }

    public ProdutoFisicoBean getProdutoFisicoBean() {
        return produtoFisicoBean;
    }

    public void setProdutoFisicoBean(ProdutoFisicoBean produtoFisicoBean) {
        this.produtoFisicoBean = produtoFisicoBean;
    }

    public ProdutoCatalogoBean getProdutoCatalogoBean() {
        return produtoCatalogoBean;
    }

    public void setProdutoCatalogoBean(ProdutoCatalogoBean produtoCatalogoBean) {
        this.produtoCatalogoBean = produtoCatalogoBean;
    }

    public VendaDTO getVendaAtual() {
        return vendaAtual;
    }

    public void setVendaAtual(VendaDTO vendaAtual) {
        this.vendaAtual = vendaAtual;
    }

    public LinhaVendaDTO getLinhaVendaAtual() {
        return linhaVendaAtual;
    }

    public void setLinhaVendaAtual(LinhaVendaDTO linhaVendaAtual) {
        this.linhaVendaAtual = linhaVendaAtual;
    }
    
    public List<ProdutoCatalogoDTO> getProdutosCatalogo(){
        try {
            return produtoCatalogoBean.getAllProdutosCatalogo();
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver a lista de Produtos de Catalogo.", logger);
            return null;
        }
    }
    
    public ProdutoCatalogoDTO getProdutoCatalogo(int id) {
        try {
            return produtoCatalogoBean.getProdutoCatalogo(id);
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver o Produto de Catalogo com o id : "+id, logger);
            return null;
        }
    }
    
    public List<ProdutoFisicoDTO> getProdutosFisicos(){
        try {
            return produtoFisicoBean.getAllProdutosFisico();
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver a lista de Produtos de Físicos.", logger);
            return null;
        }
    }
    
    public ProdutoFisicoDTO getProdutoFisico(int id) {
        try {
            return produtoFisicoBean.getProdutoFisico(id);
        } catch (Exception e) {
            FacesExceptionHandler.tratarExcecao(e, "Erro do sistema: Não foi possível devolver o Produto de Físico com o id : "+id, logger);
            return null;
        }
    }
    
    public ProdutoCatalogoDTO getProdutoCatalogoNovo() {
        return produtoCatalogoNovo;
    }

    public ProdutoFisicoDTO getProdutoFisicoNovo() {
        return produtoFisicoNovo;
    }

    public ProdutoCatalogoDTO getProdutoCatalogoAtual() {
        return produtoCatalogoAtual;
    }

    public ProdutoFisicoDTO getProdutoFisicoAtual() {
        return produtoFisicoAtual;
    }    

    public VendaDTO getVendaNova() {
        return vendaNova;
    }

    public LinhaVendaDTO getLinhaVendaNova() {
        return linhaVendaNova;
    }
    
    
    
}
